import java.util.ArrayList;
import java.util.Iterator;

public class Generic01 {
    public static void main(String[] args) {
        //demo01();
        demo02();
    }

    /*
     * 使用泛型：
     *   优点：
     *       1、避免类型转换的麻烦
     *       2、把运行期异常提升到了编译器
     *   缺点：
     *       泛型是什么类型，就只能存储相应的类型
     * */
    private static void demo02() {
        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
        //无法存储其他类型元素
        //list.add(10);
        Iterator<String> iterator=list.iterator();
        while (iterator.hasNext()) {
            String s =  iterator.next();
            System.out.println(s);
            System.out.println(s.length());
        }

    }

    /*
     * 创建集合对象，不使用泛型
     * 优点：
     *   集合不使用泛型，默认的类型就是Object类型，可以存储任意类型的数据
     * 缺点：
     *   不安全，会引发异常
     *
     * */
    private static void demo01() {
        ArrayList list = new ArrayList();
        list.add("abc");
        list.add(20);
        //使用迭代器遍历集合
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
            String s = (String) next;
            //由于20不是字符串类型，会抛出异常 java.lang.ClassCastException
            System.out.println(s.length());
        }
    }
}
